<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// - 所有的实例对象都有`__proto__`属性, 它指向的就是原型对象
	// - 这样通过`__proto__`属性就形成了一个链的结构---->原型链
	// function Box(){
	//
	// }
	// const obj = new Box();
	// console.log(obj.__proto__ === Box.prototype);// true
	// console.log(Box.prototype.__proto__ === Object.prototype);// true
	// console.log(Object.prototype.__proto__);// null
	// console.log(obj.__proto__.__proto__.__proto__);// null 原型链
	
	// - 当查找对象内部的属性/方法时,` js`引擎自动沿着这个原型链查找
	// function Box(){
	// 	this.userName = "zhangsan";
	// }
	// Box.prototype.userName = "Box.prototype.userName";
	// Object.prototype.userName = "Object.prototype.userName";
	// const obj = new Box();
	// // console.log(obj.__proto__.__proto__.__proto__);// null 原型链
	// console.log(obj.userName);
	
	// - 当给对象属性赋值时不会使用原型链, 而只是在当前对象中进行操作
	function Box(){
	
	}
	Box.prototype.userName = "lisi";
	const obj = new Box();
	console.log(obj.userName);// lisi
	// 操作的是实例属性
	// obj.userName = "zhangsan";
	// 操作原型属性
	obj.__proto__.userName = "wangwu";
	console.log(obj.userName);// wangwu
	console.log(obj)
</script>
</html>